Non-volatile data storage devices, such as universal serial bus (USB) flash memory devices or removable storage cards, have allowed for increased portability of data and software applications. Flash memory devices can enhance data storage density by storing multiple bits in each flash memory cell. For example, Multi-Level Cell (MLC) flash memory devices provide increased storage density by storing 3 bits per cell, 4 bits per cell, or more. Although increasing the number of bits per cell and reducing device feature dimensions may increase a storage density of a memory device, a bit error rate of data stored at the memory device may also increase.
Flash memory devices may be subject to a condition called “read disturb” (RD). Read disturb is caused by reading a page of flash cells many times without refreshing the block containing the page. When a page is read from a block, voltages are applied to the word line corresponding to the page that is selected to be read and are also applied to word lines of the block that are not selected to be read. These applied voltages might cause unintentional programming effects in the word lines to which the voltages are applied, particularly in the non-selected word lines. When multiple read operations are performed (e.g., thousands or tens of thousands of read operations), some of the cells of the non-selected word lines might accumulate enough disturbances to cause a stored value to change. If the cells are single-level cells, then non-programmed cells might become programmed. If the cells are multi-level cells, then programmed cells might shift to a higher state and cause bit errors.
Read disturb effects may be particularly pronounced with regard to code stored in a storage device that is executed on every power-up or reset operation. Such code may include firmware code that is executed by a flash controller of the storage device in order to operate the storage device and may also include operating system (OS) code that is executed by a host that boots up from the storage device in order to initialize a host system. Read disturb effects may also be pronounced for code or data the host loads on every power-up or reset, even if the code or data is not formally part of the operating system. For example, in a consumer device that is dedicated to executing a single application, such as a multimedia player, the host may load a player application each time after loading the operating system code. As a result, the number of read operations and the severity of read disturb effects may be similar for blocks containing operating system code and for blocks containing application code (e.g., code of the player application).
Firmware code and operating system code (and potentially application code, such as a multimedia player application) are typically not re-written (or are re-written infrequently). As a result, physical blocks of a flash memory that store such code are typically not refreshed or replaced (or infrequently refreshed or replaced). Thus, the same few physical blocks containing such code may be accessed during each boot read operation throughout the device life.
RD effects for firmware boot code may become more significant as a result of power-saving procedures employed by processors of battery operated consumer devices, such as smart phones or cameras. Many such battery operated consumer devices attempt to extend battery life by shutting down the power to a storage device when there is no read or write activity required by the host device. The storage device is powered up in order to respond to new host commands (e.g., when the user touches a key or touches the screen). Every time the storage device is powered up the firmware boot code may be re-loaded, and read disturb effects may accumulate over time and may eventually reach a failure point. RD effects due to such power saving procedures may apply to controller firmware blocks and may not apply to operating system code blocks that are not re-loaded with every power-up of the storage device (unless the processor of the host is also powering up).
Even though flash devices may be able to withstand tens of thousands read cycles without losing data to read disturb effects, such robustness may not be sufficient to guarantee immunity from read disturb errors. For example, consumer devices may be subject to abnormal operation conditions (for example when being tested at the production facility), such as repeatedly powering up and powering down after a short time intervals. Power cycling during a short time interval may prevent an embedded storage device from detecting and refreshing blocks subject to a read disturb that would normally be detected and corrected during a background process (i.e., during a period of host inactivity during normal operation). As a result, heavy read disturb stress may be applied to blocks containing operating system code that might eventually lead to a boot failure.
Another case of potential read disturb risk is a consumer device with a limited amount of random access memory (RAM) when there is insufficient capacity in the RAM for all resident applications and possibly insufficient capacity in the RAM for all operating system code. Some blocks containing non-resident operating system modules (sometimes called “overlays” of the operating system) and some blocks containing frequently used applications may be re-loaded frequently, possibly dozens of times within a single power-up session. Such repeated re-loading of blocks during power-up accelerates accumulation of read disturb effects and could result in read disturb failures.
As described above, read disturb effects may be more severe for blocks read during the boot process than for blocks containing user code or data that is not read during the boot process. However, read disturb might also be a risk even for non-boot blocks, if the non-boot blocks contain code or data that is more frequently read than average blocks during normal host operation